/* 
 * File:   camera.cpp
 * Author: chaterolas
 * 
 * Created on 24 de junio de 2009, 09:43 PM
 */

#include "camera.h"

/**
 * Crea una nueva instancia de camara apartir de las coordenada de su vector de
 * posicion de referencia y de la direccion en la que apunta
 * @param x, y, z (coordenadas del vector de posicion)
 * @param x1, y1, z1 (coordenadas del vector de direccion)
 */
Camera::Camera(double px, double py, double pz, double dx, double dy, double dz) {
    orig = new Vector3D(px, py, pz);
    dir = new Vector3D(dx, dy, dz);
}

/**
 * Crea una nueva instancia de camara apartir de su vector de posicion y
 * de direccion.
 * @parma orig (vector de posicion)
 * @parma dir (vector de direccion)
 */
Camera::Camera(const Vector3D& orig,const Vector3D& dir) {
    this->orig = new Vector3D(orig);
    this->dir = new Vector3D(dir);
}

/**
 * Destruye una instancia de camara junto con sus componentes pertinentes
 */
Camera::~Camera() {
    delete orig;
    delete dir;
}

/**
 * Asigna un nuevo valor al vector que refiere la posicion de la camara
 * @param orig
 */
void Camera::setOrigin(const Vector3D& orig) {
    this->orig->setCoor(0, orig.coor[0]);
    this->orig->setCoor(1, orig.coor[1]);
    this->orig->setCoor(2, orig.coor[2]);
}

/**
 * Regres el vector que refiere la posicion de la camara
 * @return position
 */
Vector3D *Camera::getOrigin() {
    return orig;
}

/**
 * Asigna un nuevo valor al vector que refiera la direccion en la que esta
 * apuntando la camara.
 * @param dir
 */
void Camera::setDirection(const Vector3D& dir) {
    this->dir->setCoor(0, dir.coor[0]);
    this->dir->setCoor(1, dir.coor[1]);
    this->dir->setCoor(2, dir.coor[2]);
}

/**
 * Regresa el vector que refiere la direccion en la que esta apuntando la camara.
 * @return direction
 */
Vector3D *Camera::getDirection() {
    return dir;
}

